package com.jiao.store.controller;

import com.jiao.store.controller.ex.*;
import com.jiao.store.service.ex.*;
import com.jiao.store.util.JsonResult;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpSession;

/**
 * 控制层的基础类，
 */
public class BaseController {
    /**
     * 操作成功的状态码
     */
    public static final int Ok = 200;

    //请求处理方法， 这个方法的返回值就
    // 是需要传递给全端的数据
    //自动将异常传递给此方法的参数列表上
    //当项目中产生的异常，会被统一拦截到这个方法里面，在拦截的这个过程，这个方法就充当了请求处理方法。 方法的返回值，可以直接给到前端。
    @ExceptionHandler({ServiceException.class,FileUploadException.class})   //用于统一处理抛出的异常
    public JsonResult<Void> handleException(Throwable e) {
        JsonResult<Void> result = new JsonResult<>();
        if (e instanceof UsernameDuplicatedException) {
            result.setState(4000);
            result.setMessage("用户名已经被占用");
        }else if (e instanceof UserNotFoundException) {
            result.setState(4002);
            result.setMessage("用户名不存在的异常");
        } else if (e instanceof PasswordException) {
            result.setState(4002);
            result.setMessage("用户密码错误的异常");
        }else if (e instanceof AddressCountLimitException) {
            result.setState(4003);
            result.setMessage("用户地址上限的异常");
        }else if (e instanceof AddressNotFoundException) {
            result.setState(4004);
            result.setMessage("用户收获地址数据不存在的异常");
        }else if (e instanceof AccessDeniedException) {
            result.setState(4005);
            result.setMessage("收获地址数据非法访问的异常");
        }else if (e instanceof ProductServiceException) {
            result.setState(4006);
            result.setMessage("商品没有被发现的异常");
        } else if (e instanceof InsertServiceException) {
            result.setState(5000);
            result.setMessage("插入数据产生未知异常");
        } else if (e instanceof UpdateException) {
            result.setState(5001);
            result.setMessage("更新数据产生未知异常");
        }else if (e instanceof DelException) {
            result.setState(5002);
            result.setMessage("删除数据时产生未知异常");
        } else if (e instanceof FileEmptyException) {
            result.setState(6000);
        } else if (e instanceof FileSizeException) {
            result.setState(6001);
        } else if (e instanceof FileTypeException) {
            result.setState(6002);
            result.setMessage("头像类型不符合产生异常");
        } else if (e instanceof FileStateException) {
            result.setState(6003);
        } else if (e instanceof FileUploadIOException) {
            result.setState(6004);
        }
        return result;
    }

    /**
     * 对象中的uid
     *
     * @param session对象
     * @return当前登录用户的uid值
     */
    public final Integer getUidSession(HttpSession session) {
        return Integer.valueOf(session.getAttribute("uid").toString());

    }

    public final String getUserNameFromSession(HttpSession session) {
        return (session.getAttribute("username").toString());
    }
}



